package cn.iocoder.yudao.module.jky.service.goodsattributevalue;

import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;

import java.util.*;
import cn.iocoder.yudao.module.jky.controller.admin.goodsattributevalue.vo.*;
import cn.iocoder.yudao.module.jky.dal.dataobject.goodsattributevalue.GoodsAttributeValueDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

import cn.iocoder.yudao.module.jky.convert.goodsattributevalue.GoodsAttributeValueConvert;
import cn.iocoder.yudao.module.jky.dal.mysql.goodsattributevalue.GoodsAttributeValueMapper;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.jky.enums.ErrorCodeConstants.*;

/**
 * 商品属性值 Service 实现类
 *
 * @author 超级管理员
 */
@Service
@Validated
@DS("slave")
public class GoodsAttributeValueServiceImpl implements GoodsAttributeValueService {

    @Resource
    private GoodsAttributeValueMapper goodsAttributeValueMapper;

    @Override
    public Integer createGoodsAttributeValue(GoodsAttributeValueCreateReqVO createReqVO) {
        // 插入
        GoodsAttributeValueDO goodsAttributeValue = GoodsAttributeValueConvert.INSTANCE.convert(createReqVO);
        goodsAttributeValueMapper.insert(goodsAttributeValue);
        // 返回
        return goodsAttributeValue.getGoodsAttributeValueId();
    }

    @Override
    public void updateGoodsAttributeValue(GoodsAttributeValueUpdateReqVO updateReqVO) {
        // 校验存在
        validateGoodsAttributeValueExists(updateReqVO.getGoodsAttributeValueId());
        // 更新
        GoodsAttributeValueDO updateObj = GoodsAttributeValueConvert.INSTANCE.convert(updateReqVO);
        goodsAttributeValueMapper.updateById(updateObj);
    }

    @Override
    public void deleteGoodsAttributeValue(Integer id) {
        // 校验存在
        validateGoodsAttributeValueExists(id);
        // 删除
        goodsAttributeValueMapper.deleteById(id);
    }

    private void validateGoodsAttributeValueExists(Integer id) {
        if (goodsAttributeValueMapper.selectById(id) == null) {
            throw exception(GOODS_ATTRIBUTE_VALUE_NOT_EXISTS);
        }
    }

    @Override
    public GoodsAttributeValueDO getGoodsAttributeValue(Integer id) {
        return goodsAttributeValueMapper.selectById(id);
    }

    @Override
    public List<GoodsAttributeValueDO> getGoodsAttributeValueList(Short id) {
        return goodsAttributeValueMapper.selectList(new LambdaQueryWrapperX<GoodsAttributeValueDO>()
                .eq(GoodsAttributeValueDO::getGoodsAttributeId, id));
    }

    @Override
    public List<GoodsAttributeValueDO> getGoodsAttributeValueList(Collection<Integer> ids) {
        return goodsAttributeValueMapper.selectBatchIds(ids);
    }

    @Override
    public PageResult<GoodsAttributeValueDO> getGoodsAttributeValuePage(GoodsAttributeValuePageReqVO pageReqVO) {
        return goodsAttributeValueMapper.selectPage(pageReqVO);
    }

    @Override
    public List<GoodsAttributeValueDO> getGoodsAttributeValueList(GoodsAttributeValueExportReqVO exportReqVO) {
        return goodsAttributeValueMapper.selectList(exportReqVO);
    }

}
